﻿using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using AudiPyme.BLL;
using System.IO;
using System.Data;
using AudiPyme.DAL;

namespace AudiPyme.UI
{
    public partial class AdTblTiposActivos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                LlenaGridView(TxtFiltro.Text);
            }
        }

        protected void GVTipAct_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GVTipAct.PageIndex = e.NewPageIndex;
            //Si hubiera una fila seleccionada para editar la deseleccionamos
            GVTipAct.EditIndex = -1;
            LlenaGridView(TxtFiltro.Text);
        }

        protected void LlenaGridView(String TextoBuscar)
        {
            try
            {
                ModeloContainer agenteBD = new ModeloContainer();
                TextoBuscar = TxtFiltro.Text;
                //Si no se ha introducido texto de búsqueda, sacamos todas los tipos de activos disponibles en la base de conocimiento
                if (TextoBuscar.Equals(""))
                {
                    IQueryable<TiposActivos> TipAct = TiposActivosFactory.RecogeTiposActivos();
                    if (TipAct.Count() == 0)
                    {
                        MuestraMensaje("No hay Tipos Activos disponibles en la base de conocimiento");
                    }
                    else
                    {
                        GVTipAct.DataSource = TipAct;
                        GVTipAct.DataBind();
                    }
                }
                else
                {
                    //Recoge los tipos de activos disponibles en la base de conocimiento según el nombre que se introduzca
                    IQueryable<TiposActivos> TiposActivoTexto = TiposActivosFactory.RecogeTiposActivosTexto(TextoBuscar);
                    if (TiposActivoTexto == null)
                    {
                        MuestraMensaje("No se encontraron Tipos de Activo que contuvieran la secuencia " + TextoBuscar);
                    }
                    else
                    {
                        GVTipAct.DataSource = TiposActivoTexto;
                        DataBind();
                    }
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al actualizar los datos en la tabla");
            }
        }

        protected void GVTipAct_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            //Deseleccionamos la fila
            GVTipAct.EditIndex = -1;
            LlenaGridView(TxtFiltro.Text);
        }

        protected void GVTipAct_RowEditing(object sender, GridViewEditEventArgs e)
        {
            //Seleccionamos la fila seleccionada
            GVTipAct.EditIndex = e.NewEditIndex;
            LlenaGridView(TxtFiltro.Text);
        }

        protected void GVTipAct_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            //Comprobamos que los datos introducidos pasan el validador
            Page.Validate("Validador");
            if (Page.IsValid)
            {
                try
                {
                    //Recogemos la fila seleccionada para editar
                    GridViewRow row = GVTipAct.Rows[e.RowIndex];
                    //Recogemos el TextBox TipoActivo de la fila seleccionada
                    TextBox TxtTipAct = (TextBox)row.FindControl("TxtTipoActivo");
                    //Recogemos el IdTipoActivo de la fila seleccionada
                    int IdTipoActivo = int.Parse(row.Cells[0].Text);
                    String TipoActivo = TxtTipAct.Text;
                    //Actualizamos el Valor del Tipo Activo
                    TiposActivosFactory.ActualizaTipoActivo(IdTipoActivo, TipoActivo);
                    //Deseleccionamos la fila
                    e.Cancel = true;
                    GVTipAct.EditIndex = -1;
                    //Pintamos el GridView para que aparezca el cambio
                    LlenaGridView(TxtFiltro.Text);
                    MuestraMensaje("El Tipo de Activo se ha actualizado correctamente");
                }
                catch (Exception e1)
                {
                    e1.ToString();
                    MuestraMensaje("Error al actualizar el tipo de activo");
                }
            }
            else
            {
                MuestraMensaje("No se pudo actualizar la Vulnerabilidad. Hay que rellenar todos los campos");
            }
        }

        //Método para scara por pantalla un Mensaje de información
        protected void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "showalert", SB.ToString(), true);
        }

        protected void GVTipAct_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                //Recogemos la fila seleccionada para editar
                GridViewRow row = GVTipAct.Rows[e.RowIndex];
                //Recogemos el TextBox Tipo Activo de la fila seleccionada
                TextBox TxtTipoActivo = (TextBox)row.FindControl("TxtTipoActivo");
                //Recogemos el IdTipoActivo de la fila seleccionada
                int IdTipoActivo = int.Parse(row.Cells[0].Text);
                //Eliminamos el Tipo de Activo y todas las filas de las BD asociadas a ella
                TiposActivosFactory.EliminaTipoActivo(IdTipoActivo);
                MuestraMensajeRedirige("Tipo de Activo eliminado correctamente","AdTblTiposActivos");
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al eliminar el tipo de activo");
            }
        }

        private void MuestraMensajeRedirige(string Mensaje, string Pagina)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            SB.Append("var vers = navigator.appVersion;if(vers.indexOf('MSIE 7.0') != -1) { window.location='" + Pagina + ".aspx';} else{ window.location='" + Pagina + ".aspx'; }");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }


        protected void BtnBuscar_Click(object sender, EventArgs e)
        {
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(TextoBuscar);
        }
    }
}